package medium;

/**
 * 题号：1702
 * 名称：修改后最大的二进制字符串
 * 题解：
 *    操作1：把00变成10；
 *    操作2：把10变成01；
 *   操作1可以把数值变大，需要连续的0；
 *   操作2可以把数值变小，但是可以提供连续的0
 *   所以，通过将所有的0聚集在0第一次出现的位置，就可以使字符串值变大
 *   通过操作2把所有的0聚合在其第一次出现的位置anchor，通过操作1，把高k-1位的0全部置为1，和最低位的1个0，统计出后续0出现的次数（不包括第一个0），
 *   并对anchor进行偏移，指向最后一个0聚合后的位置
 */
public class MaximumBinaryString {
    public static String solution(String binary){
        int L = binary.length();
        char[] letters  = binary.toCharArray();
        //寻找字符串是否包含0，如果不包含，说明字符串全是1，已经是最大值
        int i = 0 ;
        while(i < L && letters[i] == '1') i++;
        if(i == L) return binary;
        //记录0第一次出现的位置
        int anchor = i-1,count = 0;
        while (i < L) {
            if(letters[i] == '0' ) count++;
            letters[i] = '1' ;
            i++;
        }
        //将anchor偏移，指向最后一个0聚合后的位置
        anchor+= count;
        //将该位，置0
        letters[anchor] = '0';
        return  new String(letters);
    }

    public static void main(String[] args) {
        System.out.println(solution("000110"));
    }
}
